import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.List;
/**
 * Clase que crea el mundo principal del juego
 * 
 * @author Omar Espino 
 * @version 26/11/2014
 */
public class MundoIceClimber extends World
{
    private Popo personaje;
    private Martillo miMartillo;
    private Foca foca1;
    private Foca foca2;
    private Terodactilo terodactilo1;
    private Terodactilo terodactilo2;
    private Terodactilo terodactilo3;
    private Osopolar oso1;
    private Osopolar oso2;
    private Jefe jefe1;

    public final int NIVEL1=571;
    public final int NIVEL2=490;
    public final int NIVEL3=409;
    public final int NIVEL4=335;
    public final int NIVEL5=293;
    public final int NIVEL6=174;
    public final int NIVEL7=120;
    public final int NIVEL8=45;

    public final int SPAWN_NIVEL_1=569;
    public final int SPAWN_NIVEL_2=495;
    public final int SPAWN_NIVEL_3=419;
    public final int SPAWN_NIVEL_4=270;
    public final int SPAWN_NIVEL_5=119;

    private final int INICIADER=880;
    private final int INICIAIZQ=20;
    private final int IZQUIERDA=0;
    private final int DERECHA=1;

    private int numFocasNivel1;
    private int contadorFocasNivel1;

    private int numFocasNivel4;
    private int contadorFocasNivel4;

    private int numFocasNivel6;
    private int contadorFocasNivel6;

    private int numOsosNivel2;
    private int contadorOsosNivel2;

    private int numOsosNivel6;
    private int contadorOsosNivel6;

    private int numTerosNivel6;
    private int contadorTerosNivel6;

    private int numTerosNivel8;
    private int contadorTerosNivel8;

    private int numTerosNivel3;
    private int contadorTerosNivel3;

    private int numTerosNivel4;
    private int contadorTerosNivel4;

    private int numTerosNivel5;
    private int contadorTerosNivel5;

    private int numOsosNivel5;
    private int contadorOsosNivel5;

    private int numOsosNivelfinal;
    private int contadorOsosNivelfinal;
    private int numTerosNivelfinal;
    private int contadorTerosNivelfinal;
    private int numTerosNivelfinal2;
    private int contadorTerosNivelfinal2;

    private SimpleTimer controlDeMuerte;
    private SimpleTimer relojFocasNivel1;
    private SimpleTimer relojOsosNivel2;
    private SimpleTimer relojTerosNivel3;
    private SimpleTimer relojTerosNivel4;
    private SimpleTimer relojFocasNivel4;
    private SimpleTimer relojTerosNivel5;
    private SimpleTimer relojOsosNivel5;

    private boolean controlReloj;

    public final  GreenfootSound sonidoPrincipal=new GreenfootSound("sonidoPrincipal.mp3");
    public final  GreenfootSound gameover=new GreenfootSound("gameover.mp3");
    public final  GreenfootSound niveljefe=new GreenfootSound("niveljefe.mp3");
    public final  GreenfootSound pauseX=new GreenfootSound("pause.wav");
    public final  GreenfootSound juegocompleto=new GreenfootSound("juegocompleto.wav");
    
    private Counter cartelCuchillos;
    private Counter cartelBombas;
    private Counter cartelVidas;
    private Counter cartelPuntos;
    private Counter letJefe;

    private boolean creaLlave;
    private int etapa;
    private int numJefes;
    /**
     * Constructor for objects of class MundoIceClimber.
     * 
     */
    public MundoIceClimber()
    {    
        // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
        super(900,600, 1);
        personaje= new Popo();
        numFocasNivel1=10;
        contadorFocasNivel1=0;

        numFocasNivel6=4;
        contadorFocasNivel6=0;

        numFocasNivel4=6;
        contadorFocasNivel4=0;

        numOsosNivel2=4;
        contadorOsosNivel2=0;

        numOsosNivel6=2;
        contadorOsosNivel6=0;

        numTerosNivel3=5;
        contadorTerosNivel3=0;

        numTerosNivel8=3;
        contadorTerosNivel8=0;

        numTerosNivel6=3;
        contadorTerosNivel6=0;

        numTerosNivel4=4;
        contadorTerosNivel4=0;

        numTerosNivel5=3;
        contadorTerosNivel5=0;

        numOsosNivel5=3;
        contadorOsosNivel5=0;

        numOsosNivelfinal=3;
        contadorOsosNivelfinal=0;
        numTerosNivelfinal=3;
        contadorTerosNivelfinal=0;
        numTerosNivelfinal2=3;
        contadorTerosNivelfinal2=0;
        numJefes=1;
        creaLlave=false;
        etapa=0;

        //prepare();
        //setBackground("portada.png");
        Menu();

    }
    /**metodo principal act del mundo que llama automaticamente greenfoot*/
    public void act()
    {

        if(etapa==1)
        {
            sonidoPrincipal.playLoop();
            personaje.checaAccion();
            nivel1();
            if(cartelVidas.getValue()==0)
            {
                sonidoPrincipal.stop();
                List Actor=getObjects(Actor.class);
                removeObjects(Actor);
                setBackground("gameover.png");
                gameover.play();
                Greenfoot.delay(190);
                Greenfoot.stop();
                etapa=0;
                Menu();
            }
        }

        if(etapa==2)
        {
            sonidoPrincipal.playLoop();
            personaje.checaAccion();
            nivel2();
            if(cartelVidas.getValue()==0)
            {
                sonidoPrincipal.stop();
                List Actor=getObjects(Actor.class);
                removeObjects(Actor);
                setBackground("gameover.png");
                gameover.play();
                Greenfoot.delay(190);
                Greenfoot.stop();
                etapa=0;
                Menu();
            }
        }   

        if(etapa==3)
        {
            sonidoPrincipal.stop();
            personaje.checaAccion();
            nivel3();
            if(cartelVidas.getValue()==0)
            {
                niveljefe.stop();
                //sonidoPrincipal.stop();
                List Actor=getObjects(Actor.class);
                removeObjects(Actor);
                setBackground("gameover.png");
                gameover.play();
                Greenfoot.delay(190);
                Greenfoot.stop();
                etapa=0;
                Menu();
            }
        }

    }
    /**metodo para acceder al personaje*/
    /**@return regresa un Actor de la clase Popo con el personaje creado en el mundo*/
    public Popo getPersonaje()
    {
        return personaje;
    }
    /**metodo para acceder al Jefe*/
    /**@return regresa un Actor de la clase Jefe con el Jefe creado en el mundo*/
    public Jefe getJefe()
    {
        return jefe1;
    }
    /**metodo sobreescrito para cuando se presione el boton pause de greenfoot*/
    public void stopped()
    {
        
        if(niveljefe.isPlaying())
        {
            niveljefe.stop();
        }
        sonidoPrincipal.pause();
        pauseX.play();
    }
    
    /**metodo para iniciar la musica de los niveles principales*/
    /**@param recibe un booleano para inicar la musica cuando sea necesario*/
    public void iniciarMusica(boolean unaRespuesta)
    {
        if(unaRespuesta==true)
        {
            sonidoPrincipal.playLoop();
        }
    }

    /**metodo para acceder al cartel de los cuchillos*/
    /**@return regresa un cartel de tipo Counter con el cartel de los cuchillos creado en el mundo*/
    public Counter getCartelCuchillos()
    {
        return cartelCuchillos;
    }
    
    /**metodo para acceder al cartel de las vidas*/
    /**@return regresa un cartel de tipo Counter con el cartel de las vidas creado en el mundo*/
    public Counter getCartelVidas()
    {
        return cartelVidas;
    }

    /**metodo para acceder al cartel de los puntos*/
    /**@return regresa un cartel de tipo Counter con el cartel de los puntos creado en el mundo*/
    public Counter getCartelPuntos()
    {
        return cartelPuntos;
    }

    /**metodo para acceder al cartel de las bombas*/
    /**@return regresa un cartel de tipo Counter con el cartel de las bombas creado en el mundo*/
    public Counter getCartelBombas()
    {
        return cartelBombas;
    }

    /**metodo para acceder al martillo creado en el mundo*/
    /**@return regresa el martillo creado en el mundo de tipo Martillo*/
    public Martillo getMartillo()
    {
        return miMartillo;
    }
    
    /**metodo para modificar la etapa del mundo*/
    /**@param recibe un parametro de tipo entero con el valor de la etapa a modificar*/
    public void setEtapa(int unaEtapa)
    {
        etapa=unaEtapa;
    }

    /**metodo para acceder ala etapa del mundo*/
    /**@return regres un entero int con el valor de la etapa en la que se encuentra el mundo*/
    public int getEtapa()
    {
        return etapa;
    }

    /**metodo sobreescrito que agrega el primer escenario del juego al mundo*/
    public void prepare()
    {
        setBackground("mundo.png");

        List botones=getObjects(Boton.class);
        removeObjects(botones);
        //personaje= new Popo();
        miMartillo=new Martillo();
        Piso1 piso1=new Piso1();
        Piso2 piso2=new Piso2();
        Piso3 piso3=new Piso3();
        Piso4 piso4=new Piso4();
        Piso5 piso5=new Piso5();
        Pisobloque pisobloque1=new Pisobloque();
        Base1der base1der = new Base1der();
        Base1izq base1izq = new Base1izq();
        Base2der base2der = new Base2der();
        addObject(personaje,450,571);
        addObject(miMartillo,personaje.getX()+12,personaje.getY()-10);
        addObject(piso1,5,593);
        addObject(piso2,108,NIVEL2+28);
        addObject(piso3,170,NIVEL3+34);
        addObject(piso4,170,NIVEL5);
        addObject(piso5,170,NIVEL7+23);
        addObject(pisobloque1,5,518);
        addObject(base1der, 862, 561);
        base1der.setLocation(860, 555);
        addObject(base1izq, 47, 563);
        base1izq.setLocation(40, 556);
        Plataforma pla1=new Plataforma();
        Base4der base4der = new Base4der();
        Base4izq base4izq = new Base4izq();
        Base5der base5der = new Base5der();
        Base5izq base5izq = new Base5izq();
        Plataforma plataforma2 = new Plataforma();
        addObject(base2der, 853, 483);
        base2der.setLocation(857, 482);
        base2der.setLocation(857, 481);
        Base2izq base2izq = new Base2izq();
        addObject(base2izq, 48, 487);
        base2izq.setLocation(42, 482);
        Base3der base3der = new Base3der();
        addObject(base3der, 838, 383);
        base3der.setLocation(830, 377);
        Base3izq base3izq = new Base3izq();
        addObject(base3izq, 82, 382);
        base3izq.setLocation(74, 375);
        addObject(pla1, 450, 376);
        base3der.setLocation(832, 369);
        addObject(base4der, 753, 226);
        base4der.setLocation(827, 219);
        addObject(base4izq, 50, 235);
        base4izq.setLocation(68, 219);
        base3izq.setLocation(73, 369);
        base3izq.setLocation(70, 369);
        base3izq.setLocation(70, 369);

        addObject(base5der, 831, 98);
        base5der.setLocation(825, 68);

        addObject(base5izq, 62, 76);
        base5izq.setLocation(68, 68);
        base5der.setLocation(827, 68);

        addObject(plataforma2, 255, 226);
        Plataforma plataforma3 = new Plataforma();
        addObject(plataforma3, 634, 226);
        Plataforma plataforma4 = new Plataforma();
        addObject(plataforma4, 259, 76);
        Plataforma plataforma5 = new Plataforma();
        addObject(plataforma5, 642, 76);

        letJefe=new Counter("VIDA DEL JEFE: ");

        cartelCuchillos=new Counter("Cuchillos: ");
        cartelBombas=new Counter("Bombas: ");
        cartelVidas=new Counter("Vidas: ");
        cartelVidas.setValue(5);
        cartelPuntos=new Counter("Puntos: ");
        addObject(cartelVidas,70,15);
        addObject(cartelPuntos,70,40);
        addObject(cartelCuchillos,820,15);
        addObject(cartelBombas,820,40);
        Puerta puerta = new Puerta();
        addObject(puerta, 449, 46);
        puerta.setLocation(438, 41);
        puerta.setLocation(445, 41);

        relojFocasNivel1=new SimpleTimer();
        relojOsosNivel2=new SimpleTimer();
        relojTerosNivel3=new SimpleTimer();
        relojTerosNivel4=new SimpleTimer();
        relojFocasNivel4=new SimpleTimer();
        relojTerosNivel5=new SimpleTimer();
        relojOsosNivel5=new SimpleTimer();
        controlDeMuerte=new SimpleTimer();
        controlDeMuerte.mark();

        etapa=1;

    }

    /**metodo para acceder al cartel de la salud del jefe*/
    /**@return regresa un cartel de tipo Counter con el cartel con la salud del jefe*/
    public Counter getCartelJefe()
    {
        return letJefe;
    }

    /**metodo para crear el menu del juego con su respectiva portada y botones*/
    public void Menu()
    {
        setBackground("portada.png");
        List Actor=getObjects(Actor.class);
        removeObjects(Actor);
        BotonAyuda boton1 = new BotonAyuda();
        addObject(boton1, 600, 360);
        BotonStart start = new BotonStart();
        addObject(start, 300, 360);
        BotonScores score = new BotonScores();
        addObject(score, 477, 569);
    }
    
    /**metodo que crea la ayuda del juego que cambia la portada del menu a la portada de ayuda y sus respectivos botones*/
    public void ayuda()
    {
       List botones=getObjects(Boton.class);
       removeObjects(botones); 
       setBackground("portadaAyuda.png");
       Regresar backtoMenu=new Regresar();
       addObject(backtoMenu,800, 510);
    }

    /**metodo que crea los enemigos que apareceran durante el nivel 1*/
    public void nivel1()
    {
        if(controlDeMuerte.millisElapsed()>3000)
        {
            personaje.getImage().setTransparency(255);
            if(personaje.dead())
            {

                if(personaje.nivel()==1)
                {
                    personaje.setLocation(getWidth()/2,SPAWN_NIVEL_1);
                }

                if(personaje.nivel()==2)
                {
                    personaje.setLocation(getWidth()/2,SPAWN_NIVEL_2);
                }

                if(personaje.nivel()==3)
                {
                    personaje.setLocation(getWidth()/2,SPAWN_NIVEL_3);
                }

                if(personaje.nivel()==4)
                {
                    personaje.setLocation(getWidth()/2,SPAWN_NIVEL_4);
                }

                if(personaje.nivel()==5)
                {
                    personaje.setLocation(getWidth()/2,SPAWN_NIVEL_5);
                }

                personaje.getImage().setTransparency(120);
                controlDeMuerte.mark();
            }

        }
        //*********************************************************PASAR NIVELES*********************************************************

        //pasar  nivel 1

        if(personaje.getNumFocasMuertas()==numFocasNivel1)
        {
            relojOsosNivel2.mark();
            if(Greenfoot.isKeyDown("o"))
            {
                personaje.setLocation(getWidth()/2,SPAWN_NIVEL_2);
                personaje.setNumFocasMuertas(0);
            }
        }

        //pasar nivel 2
        if(personaje.getNumOsosMuertos()==numOsosNivel2)
        {
            relojTerosNivel3.mark();
            if(Greenfoot.isKeyDown("o"))
            {
                personaje.setLocation(getWidth()/2,SPAWN_NIVEL_3);
                personaje.setNumOsosMuertos(0);
            }
        }

        //pasar nivel 3

        if(personaje.getNumTerodactilosMuertos()==numTerosNivel3)
        {
            relojTerosNivel4.mark();
            relojFocasNivel4.mark();
            if(Greenfoot.isKeyDown("o"))
            {
                personaje.setLocation(getWidth()/2,SPAWN_NIVEL_4);
                personaje.setNumTerodactilosMuertos(0);
            }
        }

        //pasar nivel 4
        if(personaje.getNumTerodactilosMuertos()+personaje.getNumFocasMuertas()==numTerosNivel4+numFocasNivel4)
        {
            relojTerosNivel5.mark();
            relojOsosNivel5.mark();
            if(Greenfoot.isKeyDown("o"))
            {
                personaje.setLocation(getWidth()/2,SPAWN_NIVEL_5);
                personaje.setNumTerodactilosMuertos(0);
                personaje.setNumFocasMuertas(0);
            }
        }

        //pasar nivel 5
        if(personaje.getNumTerodactilosMuertos()+personaje.getNumOsosMuertos()==numTerosNivel5+numOsosNivel5)
        {
            Llave key=new Llave();
            addObject(key,439,124);
            personaje.setNumTerodactilosMuertos(0);
            personaje.setNumOsosMuertos(0);
        }

        //******************************************************CREACION DE ENEMIGOS**************************************************************
        //NIVEL 1
        if(personaje.nivel()==1)
        {
            if(relojFocasNivel1.millisElapsed()> 1500)
            {
                if(contadorFocasNivel1<numFocasNivel1)
                {
                    foca1=new Foca(Greenfoot.getRandomNumber(2));
                    if(foca1.getDireccion()==0)
                    {
                        addObject(foca1,INICIAIZQ,NIVEL1); 
                    }
                    else
                    {
                        addObject(foca1,INICIADER,NIVEL1); 
                    }
                    contadorFocasNivel1++;
                    relojFocasNivel1.mark();
                }
            }
        }
        //NIVEL 2
        if(personaje.nivel()==2)
            if(relojOsosNivel2.millisElapsed()> 2500)
            {
                if(contadorOsosNivel2<numOsosNivel2)
                {
                    oso1=new Osopolar(Greenfoot.getRandomNumber(2));
                    if(oso1.getDireccion()==0)
                    {
                        addObject(oso1,INICIAIZQ,NIVEL2); 
                    }
                    else
                    {
                        addObject(oso1,INICIADER,NIVEL2); 
                    }
                    contadorOsosNivel2++;
                    relojOsosNivel2.mark();
                }
        }
        //NIVEL 3
        if(personaje.nivel()==3)
            if(relojTerosNivel3.millisElapsed()> 2000)
            {
                if(contadorTerosNivel3<numTerosNivel3)
                {
                    terodactilo1=new Terodactilo(Greenfoot.getRandomNumber(2));
                    if(terodactilo1.getDireccion()==IZQUIERDA)
                    {
                        addObject(terodactilo1,INICIAIZQ,NIVEL4); 
                    }
                    else
                    {
                        addObject(terodactilo1,INICIADER,NIVEL4); 
                    }
                    contadorTerosNivel3++;
                    relojTerosNivel3.mark();
                }
        }
        //NIVEL 4
        if(personaje.nivel()==4)
        {
            if(relojTerosNivel4.millisElapsed()> 2000)
            {
                if(contadorTerosNivel4<numTerosNivel4)
                {
                    terodactilo2=new Terodactilo(Greenfoot.getRandomNumber(2));
                    if(terodactilo2.getDireccion()==IZQUIERDA)
                    {
                        addObject(terodactilo2,INICIAIZQ,NIVEL6); 
                    }
                    else
                    {
                        addObject(terodactilo2,INICIADER,NIVEL6); 
                    }
                    contadorTerosNivel4++;
                    relojTerosNivel4.mark();
                }
            }

            if(relojFocasNivel4.millisElapsed()> 1700)
            {
                if(contadorFocasNivel4<numFocasNivel4)
                {
                    foca2=new Foca(Greenfoot.getRandomNumber(2));
                    if(foca2.getDireccion()==IZQUIERDA)
                    {
                        addObject(foca2,INICIAIZQ,SPAWN_NIVEL_4); 
                    }
                    else
                    {
                        addObject(foca2,INICIADER,SPAWN_NIVEL_4); 
                    }
                    contadorFocasNivel4++;
                    relojFocasNivel4.mark();
                }
            }
        }

        //NIVEL 5
        if(personaje.nivel()==5)
        {
            if(relojTerosNivel5.millisElapsed()> 2000)
            {
                if(contadorTerosNivel5<numTerosNivel5)
                {
                    terodactilo3=new Terodactilo(Greenfoot.getRandomNumber(2));
                    if(terodactilo3.getDireccion()==IZQUIERDA)
                    {
                        addObject(terodactilo3,INICIAIZQ,NIVEL8); 
                    }
                    else
                    {
                        addObject(terodactilo3,INICIADER,NIVEL8); 
                    }
                    contadorTerosNivel5++;
                    relojTerosNivel5.mark();
                }
            }

            if(relojOsosNivel5.millisElapsed()> 2300)
            {
                if(contadorOsosNivel5<numOsosNivel5)
                {
                    oso2=new Osopolar(Greenfoot.getRandomNumber(2));
                    if(oso2.getDireccion()==0)
                    {
                        addObject(oso2,INICIAIZQ,NIVEL7); 
                    }
                    else
                    {
                        addObject(oso2,INICIADER,NIVEL7); 
                    }
                    contadorOsosNivel5++;
                    relojOsosNivel5.mark();
                }
            }
        }   
    }
    /**metodo que crea los enemigos que apareceran durante el nivel 2*/
    public void nivel2()
    {
        //********************MUERTE AL JUGADOR*********************
        if(controlDeMuerte.millisElapsed()>3000)
        {
            personaje.getImage().setTransparency(255);
            if(personaje.dead())
            {
                if(personaje.nivel()==6)
                {
                    personaje.setLocation(getWidth()/2,SPAWN_NIVEL_1);
                }

                if(personaje.nivel()==9)
                {
                    personaje.setLocation(getWidth()/2,SPAWN_NIVEL_4);
                }
                personaje.getImage().setTransparency(120);
                controlDeMuerte.mark();
            }
        }
        //*****************************************CREACION DE ENEMIGOS****************************************************

        if(personaje.nivel()==6)
        {
            if(relojFocasNivel1.millisElapsed()> 1500)
            {
                if(contadorFocasNivel6<numFocasNivel6)
                {
                    foca1=new Foca(Greenfoot.getRandomNumber(2));
                    if(foca1.getDireccion()==0)
                    {
                        addObject(foca1,INICIAIZQ,NIVEL1); 
                    }
                    else
                    {
                        addObject(foca1,INICIADER,NIVEL1); 
                    }
                    contadorFocasNivel6++;
                    relojFocasNivel1.mark();
                }
            }
        }

        if(personaje.nivel()==6)
        {
            if(relojTerosNivel3.millisElapsed()> 2000)
            {
                if(contadorTerosNivel6<numTerosNivel6)
                {
                    terodactilo1=new Terodactilo(Greenfoot.getRandomNumber(2));
                    if(terodactilo1.getDireccion()==IZQUIERDA)
                    {
                        addObject(terodactilo1,INICIAIZQ,NIVEL2); 
                    }
                    else
                    {
                        addObject(terodactilo1,INICIADER,NIVEL2); 
                    }
                    contadorTerosNivel6++;
                    relojTerosNivel3.mark();
                }
            }
        }

        if(personaje.nivel()==6)
        {
            if(relojTerosNivel4.millisElapsed()> 2000)
            {
                if(contadorTerosNivel8<numTerosNivel8)
                {
                    terodactilo1=new Terodactilo(Greenfoot.getRandomNumber(2));
                    if(terodactilo1.getDireccion()==IZQUIERDA)
                    {
                        addObject(terodactilo1,INICIAIZQ,NIVEL4); 
                    }
                    else
                    {
                        addObject(terodactilo1,INICIADER,NIVEL4); 
                    }
                    contadorTerosNivel8++;
                    relojTerosNivel4.mark();
                }
            }
        }

        //***********************************pasar nivele**********************************************
        if(personaje.getNumTerodactilosMuertos()+personaje.getNumFocasMuertas()==numTerosNivel6+numFocasNivel6+numTerosNivel8)
        {
            relojTerosNivel5.mark();
            relojOsosNivel5.mark();
            if(Greenfoot.isKeyDown("o"))
            {
                personaje.setLocation(getWidth()/2,SPAWN_NIVEL_4);
                personaje.setNumTerodactilosMuertos(0);
                personaje.setNumFocasMuertas(0);
            }
        }

        // NIVEL 9

        if(personaje.nivel()==9)
        {
            if(relojOsosNivel5.millisElapsed()> 1500)
            {
                if(contadorOsosNivelfinal<numOsosNivelfinal)
                {
                    oso1=new Osopolar(Greenfoot.getRandomNumber(2));
                    if(oso1.getDireccion()==0)
                    {
                        addObject(oso1,INICIAIZQ,SPAWN_NIVEL_4); 
                    }
                    else
                    {
                        addObject(oso1,INICIADER,SPAWN_NIVEL_4); 
                    }
                    contadorOsosNivelfinal++;
                    relojOsosNivel5.mark();
                }
            }
        }

        if(personaje.nivel()==9)
        {
            if( relojTerosNivel5.millisElapsed()> 2000)
            {
                if(contadorTerosNivelfinal<numTerosNivelfinal)
                {
                    terodactilo2=new Terodactilo(Greenfoot.getRandomNumber(2));
                    if(terodactilo2.getDireccion()==IZQUIERDA)
                    {
                        addObject(terodactilo2,INICIAIZQ,NIVEL6); 
                    }
                    else
                    {
                        addObject(terodactilo2,INICIADER,NIVEL6); 
                    }
                    contadorTerosNivelfinal++;
                    relojTerosNivel5.mark();
                }
            }
        }

        if(personaje.nivel()==9)
        {
            if( relojTerosNivel5.millisElapsed()> 2000)
            {
                if(contadorTerosNivelfinal2<numTerosNivelfinal2)
                {
                    terodactilo3=new Terodactilo(Greenfoot.getRandomNumber(2));
                    if(terodactilo1.getDireccion()==IZQUIERDA)
                    {
                        addObject(terodactilo3,INICIAIZQ,NIVEL8); 
                    }
                    else
                    {
                        addObject(terodactilo3,INICIADER,NIVEL8); 
                    }
                    contadorTerosNivelfinal2++;
                    relojTerosNivel5.mark();
                }
            }
        }

        //PASAR NIVEL 9
        if(personaje.getNumTerodactilosMuertos()+personaje.getNumOsosMuertos()==numTerosNivelfinal+numOsosNivelfinal+numTerosNivelfinal2)
        {
            Llave2 key2=new Llave2();
            addObject(key2,439,SPAWN_NIVEL_4);
            personaje.setNumTerodactilosMuertos(0);
            personaje.setNumOsosMuertos(0);
        }
    }
    
    /**metodo que crea los enemigos que apareceran durante el nivel 3*/
    public void nivel3()
    {
        if(controlDeMuerte.millisElapsed()>3000)
        {
            personaje.getImage().setTransparency(255);
            if(personaje.dead())
            {
                personaje.setLocation(50,SPAWN_NIVEL_1);
                personaje.getImage().setTransparency(120);
                controlDeMuerte.mark();
            }
        }

        if(numJefes!=0)
        {
            niveljefe.playLoop();
            addObject(letJefe,800,200);

            jefe1=new Jefe();
            addObject(jefe1,getWidth()-150,getHeight()-100);
            numJefes--;
        }

        if(jefe1.getHealt()<=0)
        {
            List enemigos=getObjects(Enemigo.class);
            removeObjects(enemigos);
            letJefe.setValue(0);
            //removeObject(jefe1);
            niveljefe.stop();
            juegocompleto.play();
            Greenfoot.delay(600);
            Greenfoot.stop();
            etapa=0;
            Menu();
        }
    }
}




